package com.suxin.algorithm;

/**
 * @author Tang
 * @classname TimeComplex
 * @description [  ]
 * @date 2022/3/14 22:54
 */
public class TimeComplex {

    public static void main(String[] args) {

    }

    /**
     * O(1)
     */
    public void test01(){
        // 执行一次 O(1)
        int a = 1;
        // 执行4次，
        for (int i = 0; i < 3; i++) {
            // 执行三次 O(1),,1是常数，，是能确定的执行个数
            a = a + i;
        }
    }

    /**
     * O(logn)
     */
    public void test02(){
        int n = Integer.MAX_VALUE;
        int i = 1;
        while (i < n) {
            i = i * 2; // O(logn)
        }
        // 2的x次方的n ==> x = logn

        for (int j = 0; j < n; j++) {
            while (i < n) {
                i = i * 3; // O(logn)
            }
        }
        // O(nlogn)
    }


    /**
     * O(n)
     */
    public void test03(){
        int n = Integer.MAX_VALUE;
        int i = 1;
        for (int j = 0; j < n; j++) {
            i = i + 1; // O(n),n是未知的，线性增长的，，n越大，次数越多
        }
    }

    /**
     * O(n^2)
     */
    public void test04(){
        int n = Integer.MAX_VALUE;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                // O(n^2)
            }
        }
    }

    /**
     *  O(n^2)
     */
    public void test05(){
        int n = Integer.MAX_VALUE;
        for (int i = 0; i < n; i++) { // n 次
            for (int j = i; j < n; j++) { //
                // n*(n+1) / 2 => O(n^2)
            }
        }
    }

}